RISC-VとChiselで学ぶ はじめてのCPU自作
技術選定尖ってるくない?
よさそう
CPUの構造を理解したい
RISC-V学びたい
まえがき
People who are really serious about software should make their own hardware.
aumy.icon強すぎる
アラン・ケイの言葉
1章
電気を帯びている粒子が持っている位置エネルギー
電子回路から2値情報の集合体への抽象化
電位は連続的に値が変化するアナログ信号
デジタル信号という不連続な2つの値
特定の閾値で変換する
多少の値の変化を吸収でき正確性が高まる
電位の等しいひとつながりの配線が持つ情報量が1bit
0と1の2値だけを扱う論理体系
AND, OR, NOT
ベース、コレクタ、エミッタ
ベースの電位が1ならコレクタとエミッタが通電する
0なら絶縁する
入力AとBを(1回)加算する装置は組み合わせ論理回路のみで実装可能
しかし、加算を2回繰り返せない
順序論理…現在の入力値と出力値から最終的な出力値が決まる
出力値も入力値の1つである
ラッチ回路
入力S, R 出力Q
S=R=0のときQは前状態のQ
組み合わせ論理回路の出力を順序論理回路に繋ぐと 有限状態機械 順序論理回路の状態更新タイミングを揃えたい
クロック信号…規則的に0と1を示す信号
クロックのエッジ (信号が入れ替わるタイミング) で状態を更新する
RSラッチからDラッチ、そしてDフリップフロップへ
レジスタは共通のクロック入力を持つ複数のDFFで構成されている
現実の論理回路ではトランスミッションゲートとNOTゲート
2章 コンピュータ・アーキテクチャ
入力装置がメモリをデータに書き込む
CPUがメモリから命令とデータを読み込む
CPUが演算をする
CPUが演算結果をメモリに書き出す
出力装置がメモリからデータを読み出す
レジスタ
D-FF、揮発性
キャッシュ
SRAM、揮発性
メインメモリ
DRAM、揮発性
ストレージ
HDD/SSD、不揮発性
レジスタ
1本のレジスタに記憶できるデータ量はアーキテクチャごとに異なる
RISC-V 32bitでは32bit/本のレジスタが32本で1024bitある
メインメモリ
DRAM、トランジスタとキャパシタ(コンデンサ)
まあ気にせん
レジスタは1本32bitだけどメモリは1番地8bit
命令フェッチ
IF: Instruction Fetch
メモリの命令を取得
プログラムカウンタ (PC) というレジスタのメモリアドレス
RISC-Vの命令は32bit長なのでPCは1命令取得するごとに4ずつカウントアップされる
RISC-Vのプログラムカウンタは32本のレジスタとは別
命令デコード
フェッチしてきた機械語を解読する
命令セットアーキテクチャ
RISC-V
x86, x64, ARMv8
CISC/RISC
RISC-Vは固定長命令なので長さを把握せずデコードを開始できる
RISC-Vでは6種類の命令フォーマットがあるが、オペランドのbit位置はすべて固定なので回路量が減らせる可能性がある
演算
メモリアクセス
RISC-Vではデータメモリ (メインメモリってことでいいのかこれは) へのアクセスはロード命令、ストア命令に限定されている
ロードして演算する
ライトバック
演算結果もしくはメモリロードデータをレジスタに書き込む
x86はCISCスタイルの命令をCPU内部でRISCスタイルのマイクロオペレーションに変換して実行している